package bean;

import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/*
 * 用于执行数据库操作的类
 */
public class Operation {

	SqlSession session;

	// 初始化一个Map，用于储存键值对
	Map<String, String> map = new HashMap<String, String>();

	/*
	 * 初始化MyBatis
	 */
	public void init(int i) {
		switch (i) {
		case 0:
			// mybatis的配置文件
			String resource = "mybatis/MyBatisConfig.xml";
			Reader reader = null;
			try {
				reader = Resources.getResourceAsReader(resource);
			} catch (IOException e) {
				System.out.println(e);
				System.out.println("找不到MyBatis的配置文件！");
			}
			// 构建sqlSession的工厂
			SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
			// 创建能执行映射文件中sql的sqlSession
			session = sqlMapper.openSession();
			break;
		case 1:
			session.close();
			break;
		}
	}

	/*
	 * register用于注册功能，注册成功返回true，失败则返回false
	 */
	public boolean register(String username, String password, String email, String tel) {
		init(0);
		map.put("username", username);
		map.put("password", password);
		map.put("email", email);
		map.put("tel", tel);
		try {
			if (session.insert("register", map) == 1) {
				session.commit();
				init(1);
				return true;
			} else {
				init(1);
				return false;
			}
		} catch (Exception e) {
			System.out.println(e);
			System.out.println("注册失败！");
			return false;
		}
	}

	/*
	 * login方法用于登录功能， 登录成功返回true，失败则返回false
	 */
	public Login login(String username, String password) {
		init(0);
		map.put("username", username);
		map.put("password", password);
		Login login = new Login();
		login = session.selectOne("login", map);
		try {
			init(1);
			return login;
		} catch (Exception e) {
			System.out.println(e);
			return login;
		}
	}

	// inquire方法用于查询数据库联系人信息，返回值为结果集
	public List<TelInfo> inquire(String userid) {
		init(0);
		map.put("userid", userid);
		List<TelInfo> list = session.selectList("telinfoall", map);
		return list;
	}

	// getTelInfo方法用于查询数据库联系人信息，返回值为结果集
	public List<TelInfo> getTelInfo(String userid,String telid) {
		init(0);
		map.put("userid", userid);
		map.put("telid", telid);
		List<TelInfo> list = session.selectList("telinfo", map);
		return list;
	}

	// del方法用于执行数据库删除行操作 成功返回true,失败返回false
	public boolean del(String userid,String telid) {
		init(0);
		map.put("userid", userid);
		map.put("id", telid);
		try {
			if (session.delete("delete", map) != 0) {
				session.commit();
				init(1);
				return true;
			} else {
				init(1);
				return false;
			}
		} catch (Exception e) {
			System.out.println(e);
			return false;
		}
	}

	// add方法用于添加联系人 成功返回true 失败返回false
	public boolean add(String name, String tel, String remarks, String id, String userid) {
		init(0);
		map.put("name", name);
		map.put("tel", tel);
		map.put("remarks", remarks);
		map.put("id", id);
		map.put("userid", userid);
		try {
			if (session.insert("add", map) != 0) {
				session.commit();
				init(1);
				return true;
			} else {
				init(1);
				return false;
			}
		} catch (Exception e) {
			System.out.println(e);
			return false;
		}
	}

	// revise方法用于修改联系人
	public boolean revise(String name, String tel, String remarks, String oldName, String oldTel, String oldRemarks,
			String id, String userid) {
		init(0);
		map.put("name", name);
		map.put("tel", tel);
		map.put("remarks", remarks);
		map.put("oldName", oldName);
		map.put("oldTel", oldTel);
		map.put("oldRemarks", oldRemarks);
		map.put("id", id);
		map.put("userid", userid);
		try {
			if (session.update("update", map) != 0) {
				session.commit();
				init(1);
				return true;
			} else {
				return false;
			}
		} catch (Exception e) {
			System.out.println(e);
			return false;
		}

	}
}
